﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using Jurassic_Island;
using System.Data;
using System.IO;

namespace JurassicIslandWeb
{
    public partial class Tienda : System.Web.UI.Page
    {
        private ENPartidas enPart = new ENPartidas();

        protected void Page_Load(object sender, EventArgs e)
        {

            //rbListaObjetos.Items.Clear();

            if (User.Identity.IsAuthenticated)
            {
                try
                {
                    ENJugadores enJugAux = new ENJugadores();
                    enJugAux.ObtenerJugador(User.Identity.Name); //Comprobamos que el jugador todavía existe
                    try
                    {
                        if (!IsPostBack)
                        {
                            ENObjeto enObjetos = new ENObjeto();
                            DataSet dsObjetos = enObjetos.ObtenerListaObjetos();
                            //dsObjetos.Tables["Objetos"].Rows
                            foreach (DataRow drObjeto in dsObjetos.Tables["Objetos"].Rows)
                            {
                                ListItem liObjeto = new ListItem(drObjeto["Nombre Objeto"].ToString(), drObjeto["Nombre Objeto"].ToString());
                                rbListaObjetos.Items.Add(liObjeto);
                            }
                        }

                        //ENPartidas enPart = new ENPartidas();
                        DataSet dsPart = enPart.ObtenerListaPartidasPorJugador(User.Identity.Name);
                        enPart = new ENPartidas(dsPart.Tables["Partidas"].Rows[0]);

                        lbSaldo.Text = enPart.Dinero.ToString();

                        if (enPart.Vida <= 0)
                        {
                            lnkBtnComprar.Visible = false;
                            String texto = "";
                            texto += "<img src=\"Images/skull.gif\" align=\"absmiddle\" style=\"height:20px;\" />";
                            texto += "¡Est&aacute;s muerto!";
                            texto += "<img src=\"Images/skull.gif\" align=\"absmiddle\" style=\"height:20px;\" /><br />";
                            texto += "<img src=\"Images/skull.gif\" align=\"absmiddle\" style=\"height:20px;\" />";
                            texto += "No puedes comprar...";
                            texto += "<img src=\"Images/skull.gif\" align=\"absmiddle\" style=\"height:20px;\" /><br />";
                            lbRespuesta.Text = texto;
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
                catch (Exception)
                {   //Llegaremos aquí si no existiera el jugador en la base de datos.
                    FormsAuthentication.SignOut(); //Se cierra la sesión para borrar la cookie.
                    Response.Redirect("~/Bienvenida.aspx"); //Se le redirige a la pagina de bienvenida
                }
            }
            else
            {
                Response.Redirect("~/Bienvenida.aspx");
            }



            Page.Title = Master.Page.Header.Title + " - Tienda";
        }

        protected void rbListaObjetos_SelectedIndexChanged(object sender, EventArgs e)
        {
            //rbListaObjetos.SelectedValue.ToString();
            CargaObjeto(rbListaObjetos.SelectedItem.Text);
        }

        protected void CargaObjeto(string objeto)
        {
            try
            {
                ENObjeto enObjeto = new ENObjeto();
                enObjeto = enObjeto.ObtenerObjeto(objeto);
                lbNombre.Text = enObjeto.Nombre;
                lbCoste.Text = enObjeto.Coste.ToString();
                Mochila.ImageUrl = "Images/Objetos/" + enObjeto.Imagen;
                upObjeto.Update();
                divArticulo.Visible = true;
                lbRespuesta.Visible = false;
            }
            catch (Exception)
            {
            }
        }

        protected void rbListaObjetos_TextChanged(object sender, EventArgs e)
        {
            //CargaObjeto(rbListaObjetos.SelectedItem.Text);
        }

        protected void lnkBtnComprar_Click(object sender, EventArgs e)
        {
            // Se supone que si el jugador está muerto no entrará aquí
            if (rbListaObjetos.SelectedIndex >= 0) //Si hay seleccionado algún objeto
            {
                lbRespuesta.Visible = false;
                //Obtenemos los datos del objeto
                ENObjeto enObjeto = new ENObjeto();
                enObjeto = enObjeto.ObtenerObjeto(lbNombre.Text);

                //Comprobamos que el jugador dispone de dinero suficiente para comprar.
                if (enPart.Dinero >= enObjeto.Coste) //Si hay dinero
                {
                    ENObjetoMochila enObjMochAux = new ENObjetoMochila();
                    DataSet dsMochila = enObjMochAux.ObtenerListaObjetosMochilaPorPartida(enPart.ID);
                    DataTable dtMochila = dsMochila.Tables["Objetos_Mochila"];

                    bool existe = false;
                    foreach (DataRow dr in dtMochila.Rows)
                    {
                        if (dr["objeto_objmoch"].ToString().Equals(enObjeto.Nombre))
                        {
                            existe |= true;
                        }
                    }

                    //Si el jugador no tiene el objeto
                    if (!existe)
                    {
                        //Creamos un nuevo ObjetoMochila
                        ENObjetoMochila enObjMochila = new ENObjetoMochila();
                        enObjMochila.Partida = enPart.ID;
                        enObjMochila.Objeto = rbListaObjetos.SelectedValue;

                        try
                        {
                            enObjMochila.AñadirObjetoMochila();
                            enPart.Dinero -= int.Parse(enObjeto.Coste.ToString());
                            enPart.GuardarPartida();
                            lbSaldo.Text = enPart.Dinero.ToString();
                            lbRespuesta.Text = "¡Has comprado " + enObjeto.Nombre + "!";
                            lbRespuesta.Visible = true;
                        }
                        catch
                        {
                            lbRespuesta.Text = "Se produjo un error al añadir " + enObjeto.Nombre + " a la mochila.";
                            lbRespuesta.Visible = true;
                        }
                    }
                    else
                    {
                        lbRespuesta.Text = "¡Ya tienes " + enObjeto.Nombre + " en la mochila!";
                        lbRespuesta.Visible = true;
                    }
                }
                else
                {
                    lbRespuesta.Text = "¡No dispones de dinero suficiente para poder comprar " + enObjeto.Nombre + "!";
                    lbRespuesta.Visible = true;
                }
            }
        }
    }
}